public class Main {

    public static void func(Test.Message<?> temp){ //此时这个？为通配符，可以接收任意类型，但由于不确定类型，故无法修改
        System.out.println(temp.getMessage());
    }
    public static void main(String[] args) {
        String str1 = "hello";
        String str2 = "hello";
        System.out.println(str1==str2); //此时默认引入了常量池 且由于str1与str2相同，所以默认创建str2的时候直接指向str1的地址

        String str3 = new String("hello");  //分配了新的内存 常量池中存储地址不一样
        String str4 = new String("hello");
        System.out.println(str1 == str3);
        System.out.println(str3 == str4);


        char[] ch = new char[]{'a','b','c'};
        String s1 = new String(ch); //此时s1不在常量池中
        s1.intern(); //调用intern方法后，直接将s1放入常量池中
        String s2 = "abc";
        System.out.println(s2 == s1); //此时再尝试就已经成功了


        Test.Message<String> message = new Test.Message<>();
        message.setMessage("你好");
        func(message);

        Test.Message<Integer> message1 = new Test.Message<>();
        message1.setMessage(1998);
        func(message1);
    }
}
